package br.com.linkin.mi.service;

import br.com.linkin.mi.contants.Constant;
import br.com.linkin.mi.soap.Soap;
import br.com.linkin.mi.utils.Properties;
import br.com.linkin.mi.utils.xml.Envelope;
import javax.xml.soap.SOAPMessage;

/**
 *
 * @author daniel.mendonca
 */
public class CteService extends BaseService  {

    /**
     * execute StatusServico
     * @param cabecMsg
     * @param dadosMsg
     * @return 
     */
    public String executeStatusServico(String cabecMsg, String dadosMsg) throws ServiceException {        
        try {            
            String msg = Envelope.message(cabecMsg, dadosMsg);
            return call(Constant.URL_CTESTATUSSERVICO, msg).toString();            
        } catch (Exception e) {
            throw new ServiceException("CteService.executeStatusServico: ", e);
        }
    }

    /**
     * execute Inutilizacao
     * @param cabecMsg
     * @param dadosMsg
     * @return 
     */
    public String executeInutilizacao(String cabecMsg, String dadosMsg) throws ServiceException {        
        br.inf.portalfiscal.cte.wsdl.cteinutilizacao.CteCabecMsg cabecalho = new br.inf.portalfiscal.cte.wsdl.cteinutilizacao.CteCabecMsg();
        br.inf.portalfiscal.cte.wsdl.cteinutilizacao.CteDadosMsg dados = new br.inf.portalfiscal.cte.wsdl.cteinutilizacao.CteDadosMsg();
        try {} catch (Exception e) {}
        return "<xml>executeInutilizacao</xml>";
    }

    /**
     * execute Cancelamento
     * @param cabecMsg
     * @param dadosMsg
     * @return 
     */
    public String executeCancelamento(String cabecMsg, String dadosMsg) throws ServiceException {        
        br.inf.portalfiscal.cte.wsdl.ctecancelamento.CteCabecMsg cabecalho = new br.inf.portalfiscal.cte.wsdl.ctecancelamento.CteCabecMsg();
        br.inf.portalfiscal.cte.wsdl.ctecancelamento.CteDadosMsg dados = new br.inf.portalfiscal.cte.wsdl.ctecancelamento.CteDadosMsg();
        try {} catch (Exception e) {}
        return "<xml>executeCancelamento</xml>";
    }

    /**
     * execute RetRecepcao
     * @param cabecMsg
     * @param dadosMsg
     * @return 
     */
    public String executeRetRecepcao(String cabecMsg, String dadosMsg) throws ServiceException {        
        br.inf.portalfiscal.cte.wsdl.cteretrecepcao.CteCabecMsg cabecalho = new br.inf.portalfiscal.cte.wsdl.cteretrecepcao.CteCabecMsg();
        br.inf.portalfiscal.cte.wsdl.cteretrecepcao.CteDadosMsg dados = new br.inf.portalfiscal.cte.wsdl.cteretrecepcao.CteDadosMsg();
        try {} catch (Exception e) {}
        return "<xml>executeRetRecepcao</xml>";
    }

    /**
     * execute Recepcao
     * @param cabecMsg
     * @param dadosMsg
     * @return 
     */
    public String executeRecepcao(String cabecMsg, String dadosMsg) throws ServiceException {        
        br.inf.portalfiscal.cte.wsdl.cterecepcao.CteCabecMsg cabecalho = new br.inf.portalfiscal.cte.wsdl.cterecepcao.CteCabecMsg();
        br.inf.portalfiscal.cte.wsdl.cterecepcao.CteDadosMsg dados = new br.inf.portalfiscal.cte.wsdl.cterecepcao.CteDadosMsg();
        try {} catch (Exception e) {}
        return "<xml>executeRecepcao</xml>";
    }

    /**
     * execute Consulta
     * @param cabecMsg
     * @param dadosMsg
     * @return 
     */
    public String executeConsulta(String cabecMsg, String dadosMsg) throws ServiceException {        
        br.inf.portalfiscal.cte.wsdl.cteconsulta.CteCabecMsg cabecalho = new br.inf.portalfiscal.cte.wsdl.cteconsulta.CteCabecMsg();
        br.inf.portalfiscal.cte.wsdl.cteconsulta.CteDadosMsg dados = new br.inf.portalfiscal.cte.wsdl.cteconsulta.CteDadosMsg();
        try {} catch (Exception e) {}
        return "<xml>executeConsulta</xml>";
    }
    
    /**
     * call Soap Service
     * @return 
     */
    public static String call(String propertie, String msg) throws Exception{
        Soap.configurarCertificado();
        SOAPMessage sm = Soap.toMessage(msg);
        SOAPMessage retorno = Soap.send(Properties.config(propertie), sm);
        return retorno.toString();
    }
    
}
